package util.cast;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 转换工具类
 * 若待转换值为null或者出现异常，则使用默认值
 * @Author zt
 * @date 2021/11/11 11:36
 * @Version 1.0
 */
public class CastUtil {
    /**
     * 字符串转换为int
     * @param str 字符串
     * @param defaultValue 默认值
     * @return 转换后的结果
     */
    public static int strToInt(String str, int defaultValue) {
        try {
            defaultValue = Integer.parseInt(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * String转换为long
     * @param str 字符串
     * @param defaultValue 默认值
     * @return  转换后的结果
     */
    public static long strToLong(String str, long defaultValue) {
        try {
            defaultValue = Long.parseLong(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 字符串转换为float
     * @param str 字符串
     * @param defaultValue 默认值
     * @return  转换后的结果
     */
    public static float strToFloat(String str, float defaultValue) {
        try {
            defaultValue = Float.parseFloat(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * String转换为Double
     * @param str 字符串
     * @param defaultValue 默认值
     * @return 返回结果
     */
    public static double strToDouble(String str, double defaultValue) {
        try {
            defaultValue = Double.parseDouble(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 字符串转换日期(String转Date)
     * @param str 字符串
     * @param  format 格式
     * @param defaultValue 默认值
     * @return 转换后的结果
     */
    public static Date strToDate(String str, String format,Date defaultValue) {
        return getDate(str, format, defaultValue);
    }

    /**
     *  字符串转换日期(String转Date)
     * @param str  字符串
     * @param format 格式
     * @return 结果
     */
    public static Date strToDate(String str, String format) {
        return getDate(str,format);
    }

    /**
     * 字符串转换日期(String转Date) 格式:yyyy-MM-dd HH:mm:ss
     * @param str 字符串
     * @param defaultValue 默认值
     * @return 转换后的结果
     */
    public static Date strToDate(String str, Date defaultValue) {
        return getDate(str, "yyyy-MM-dd HH:mm:ss", defaultValue);
    }

    /**
     * 字符串转换为指定格式的日期 (String 转 Date)
     * @param str 字符串
     * @param format 指定格式
     * @return 转换后的结果
     */
    private static Date getDate(String str, String format) {
        SimpleDateFormat fmt = new SimpleDateFormat(format);
        Date  defaultValue=null;
        try {
            defaultValue = fmt.parse(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 字符串转换为指定格式的日期 (String 转 Date)
     * @param str 字符串
     * @param format 指定格式
     * @param defaultValue  默认值
     * @return 转换后的结果
     */
    private static Date getDate(String str, String format,Date defaultValue) {
        SimpleDateFormat fmt = new SimpleDateFormat(format);
        try {
            defaultValue = fmt.parse(str);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 日期转换为字符串 (Date转 String)
     * @param date  日期
     * @param defaultValue 默认值
     * @return 处理结果
     */
    public static String dateToStr(Date date, String defaultValue) {
        return dateToStr(date, "yyyy-MM-dd HH:mm:ss", defaultValue);
    }

    /**
     * 日期转换为指定格式的字符串 (Date 转 String)
     * @param date 日期
     * @param format  格式
     * @param defaultValue 默认值
     * @return 结果
     */
    public static String dateToStr(java.util.Date date, String format, String defaultValue) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            defaultValue = sdf.format(date);
        } catch (Exception localException) {
        }
        return defaultValue;
    }

    /**
     * 如果字符串为空则使用默认字符串
     * @param str 字符串
     * @param defaultValue 默认值
     * @return 结果
     */
    public static String strToStr(String str, String defaultValue) {
        if ((str != null) && (!(str.isEmpty()))) {
            defaultValue = str;
        }
        return defaultValue;
    }

    /**
     * util date 转换为 sqldate
     * @param date 日志
     * @return 结果
     */
    public static java.sql.Date dateToSqlDate(java.util.Date date) {
        return new java.sql.Date(date.getTime());
    }

    /**
     * sql date 转换为 util date
     * @param date 日期
     * @return 结果
     */
    public static java.util.Date sqlDateToDate(java.sql.Date date) {
        return new java.util.Date(date.getTime());
    }

    /**
     * date 转换为 时间戳
     * @param date 日期
     * @return 结果
     */
    public static Timestamp dateToSqlTimestamp(java.util.Date date) {
        return new Timestamp(date.getTime());
    }

    /**
     * timestamp 转换为date
     * @param date 时间戳
     * @return 结果
     */
    public static java.util.Date qlTimestampToDate(Timestamp date) {
        return new java.util.Date(date.getTime());
    }
}
